当前位置:  开发笔记 > 编程语言 > 正文

如何(替换|创建)rails 2.0迁移的枚举字段?

如何解决《如何(替换|创建)rails2.0迁移的枚举字段?》经验,为你挑选了3个好方法。

我想在我正在进行的sone迁移中创建一个枚举字段,我尝试在谷歌搜索,但我无法在迁移中找到方法

我发现的唯一的事情是

  t.column :status, :enum, :limit => [:accepted, :cancelled, :pending]

但看起来上面的代码只在rails 1.xxx上运行,因为我正在运行rails 2.0

这就是我尝试但它失败了

class CreatePayments < ActiveRecord::Migration
  def self.up
    create_table :payments do |t|
      t.string :concept
      t.integer :user_id
      t.text :notes
      t.enum :status, :limit => [:accepted, :cancelled, :pending]

      t.timestamps
    end
  end

  def self.down
    drop_table :payments
  end
end

那么,如果不允许,您认为什么是一个好的解决方案?只是一个文本字段,并从模型验证?



1> Adam Lassek..:

您可以使用该t.column方法手动指定类型.Rails会将此解释为字符串列,您可以像Pavel建议的那样简单地向模型添加验证器:

class CreatePayments < ActiveRecord::Migration
  def self.up
    create_table :payments do |t|
      t.string :concept
      t.integer :user_id
      t.text :notes
      t.column :status, "ENUM('accepted', 'cancelled', 'pending')"

      t.timestamps
    end    
  end

  def self.down
    drop_table :payments
  end
end

class Payment < ActiveRecord::Base
  validates_inclusion_of :status, :in => %w(accepted cancelled pending)
end



2> Pavel Nikolo..:

请参阅http://zargony.com/2008/04/28/five-tips-for-developing-rails-applications上的#3提示

这正是你需要的!

 class User < ActiveRecord::Base
   validates_inclusion_of :status, :in => [:active, :inactive]

   def status
     read_attribute(:status).to_sym
   end

   def status= (value)
     write_attribute(:status, value.to_s)
   end
 end

HTH



3> Lailson Band..:

您可以尝试(非常)全面的jeff的enumerated_attribute gem或者使用这个简单的解决方法:

class Person < ActiveRecord::Base
  SEX = [:male, :female]

  def sex
    SEX[read_attribute(:sex)]
  end

  def sex=(value)
    write_attribute(:sex, SEX.index(value))
  end
end

然后将该sex属性声明为整数:

t.integer :sex

这对我来说非常好!= d

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有